package com.zxj.friend.service.exam;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zxj.common.core.domain.R;
import com.zxj.common.core.domain.vo.PageVO;
import com.zxj.friend.domain.exam.dto.ExamQueryPageDTO;
import com.zxj.friend.domain.exam.dto.ExamRankDTO;
import com.zxj.friend.domain.exam.entity.Exam;
import com.zxj.friend.domain.exam.vo.ExamRankVO;
import com.zxj.friend.domain.exam.vo.ExamVO;

/**
 * <p>
 * 竞赛表结构 服务类
 * </p>
 *
 * @author zxj2022
 * @since 2024-12-29
 */
public interface IExamService extends IService<Exam> {

    /**
     * 数据库版: 分页查询竞赛列表
     *
     * @param examQueryPageDTO 查询条件
     * @return 竞赛列表
     */
    PageVO<ExamVO> pageQuery(ExamQueryPageDTO examQueryPageDTO);


    /**
     * redis版: 分页查询竞赛列表
     *
     * @param examQueryPageDTO 查询条件
     * @return 竞赛列表
     */
    PageVO<ExamVO> redisList(ExamQueryPageDTO examQueryPageDTO);

    /**
     * 获取竞赛中的第一题
     *
     * @param examId 竞赛ID
     * @return 第一题的ID
     */
    String getFirstQuestion(Long examId);

    /**
     * 获取竞赛上一题ID
     * @param examId 竞赛ID
     * @param questionId 题目ID
     * @return 上一题的ID
     */
    String preQuestion(Long examId, Long questionId);

    /**
     * 获取竞赛下一题ID
     * @param examId 竞赛ID
     * @param questionId 题目ID
     * @return 下一题的ID
     */
    String nextQuestion(Long examId, Long questionId);

    /**
     * 获取竞赛排名列表
     * @param examRankDTO 查询条件
     * @return 竞赛排名列表
     */
    PageVO<ExamRankVO> rankList(ExamRankDTO examRankDTO);
}
